package com.itheima.advantagesup.service.impl;

import com.itheima.advantagesup.entity.SysMenu;
import com.itheima.advantagesup.dto.SysMenuDto;
import com.itheima.advantagesup.mapper.SysMenuMapper;
import com.itheima.advantagesup.service.SysMenuService;
import com.itheima.advantagesup.vo.MenuVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

@Service
public class SysMenuServiceImpl implements SysMenuService {
    @Autowired
    private SysMenuMapper sysMenuMapper;

    @Override
    public List<MenuVO> getAll() {
        //通过父本标识pid获得最外层的嵌套菜单集合
        List<MenuVO> menu = sysMenuMapper.getMenuByPid(0);
        //对最外层的菜单嵌套集合进行遍历
        for (MenuVO m1 : menu) {//(广告管理 id= 132,  内容管理  id= 128, 系统设置id = 1  )
            //拿到第二层的菜单集合
            //1. 广告管理:子菜单集合
            //2. 内容管理:子菜单集合
            //3. 系统设置:子菜单集合
            List<MenuVO> menu2 = sysMenuMapper.getMenuByPid(m1.getId());
           // 对第二层的菜单嵌套集合进行遍历
            for (MenuVO m2 : menu2) {
                //拿到第三层的菜单集合
                List<MenuVO> menu3 = sysMenuMapper.getMenuByPid(m2.getId());
                //将第三层的菜单集合赋值给第二层的菜单集合中每个菜单的children
                m2.setChildren(menu3);
            }
            //将第二层的菜单集合赋值给最外层的菜单集合中每个菜单的children
            m1.setChildren(menu2);
        }
        return menu;
    }

    @Override
    public void add(SysMenuDto sysMenuDto) {
        SysMenu sysMenu = getSysMenu(sysMenuDto);
        sysMenu.setCreateDate(LocalDateTime.now());
        sysMenu.setUpdateDate(LocalDateTime.now());
        sysMenuMapper.add(sysMenu);
    }

    @Override
    public void delete(String id) {
        Integer ids = Integer.valueOf(id);
        sysMenuMapper.delete(ids);
    }

    @Override
    public void update(SysMenuDto sysMenuDto) {
        SysMenu sysMenu = getSysMenu(sysMenuDto);
        sysMenu.setUpdateDate(LocalDateTime.now());
        sysMenuMapper.update(sysMenu);
    }

    @Override
    public SysMenu findById(String id) {
        Integer ids = Integer.valueOf(id);
        return sysMenuMapper.findById(ids);
    }

    //将Dto转换为entity
    private SysMenu getSysMenu(SysMenuDto sysMenuDto){
        SysMenu sysMenu = new SysMenu();
        sysMenu.setId(sysMenuDto.getId());
        sysMenu.setPid(sysMenuDto.getPid());
        sysMenu.setPath(sysMenuDto.getPath());
        sysMenu.setComponent(sysMenuDto.getComponent());
        sysMenu.setTitle(sysMenuDto.getTitle());
        sysMenu.setIcon(sysMenuDto.getIcon());
        sysMenu.setIsShow(sysMenuDto.getIs_show());
        sysMenu.setIsCache(sysMenuDto.getIs_cache());
        sysMenu.setIsLink(sysMenuDto.getIs_link());
        sysMenu.setRedirect(sysMenuDto.getRedirect());
        sysMenu.setType(sysMenuDto.getType());
        sysMenu.setSort(sysMenuDto.getSort());
        sysMenu.setMark(sysMenuDto.getMark());
//        sysMenu.setPid(Integer.valueOf(sysMenuDto.getPid()));
//        sysMenu.setPath(sysMenuDto.getPath());
//        sysMenu.setComponent(sysMenuDto.getComponent());
//        sysMenu.setTitle(sysMenuDto.getTitle());
//        sysMenu.setIcon(sysMenuDto.getIcon());
//        sysMenu.setIsShow(Integer.valueOf(sysMenuDto.getIs_show()));
//        sysMenu.setIsCache(Integer.valueOf(sysMenuDto.getIs_cache()));
//        sysMenu.setIsLink(Integer.valueOf(sysMenuDto.getIs_link()));
//        sysMenu.setRedirect(sysMenuDto.getRedirect());
//        sysMenu.setDefaultData(sysMenuDto.getDefault_data());
//        sysMenu.setCreateDate(LocalDateTime.now());
//        sysMenu.setUpdateDate(LocalDateTime.now());
//        sysMenu.setType(Integer.valueOf(sysMenuDto.getType()));
//        sysMenu.setSort(new BigDecimal(sysMenuDto.getSort()));
//        sysMenu.setMark(sysMenuDto.getMark());
        return sysMenu;
    }
}
